home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / viking1 / code.lua next >
Encoding:
Text File  |  2005-07-16  |  12.0 KB  |  376 lines

  1.  
  2. -- -----------------------------------------------------------------
  3. -- actor codes:
  4. -- 111 ... piskac
  5. -- 121 ... basak
  6. -- 131 ... melodak1, melodak2
  7. local PISKAC_SONG = 111
  8. local BASAK_SONG = 121
  9. local MELODAK_SONG = 131
  10.  
  11. -- -----------------------------------------------------------------
  12. -- Init
  13. -- -----------------------------------------------------------------
  14. local function prog_init()
  15.     initModels()
  16.     local pokus = getRestartCount()
  17.  
  18.  
  19.     -- -------------------------------------------------------------
  20.     local function prog_init_room()
  21.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  22.  
  23.         room.blok = -1
  24.         room.startblok = 0
  25.         room.uvod = 0
  26.         room.dohrat = randint(300, 700)
  27.         sound_playMusic("music/rybky04.ogg")
  28.  
  29.         return function()
  30.             room.startblok = 0
  31.             if room.blok >= 0 then
  32.                 if not model_isTalking(PISKAC_SONG) then
  33.                     room.blok = room.blok + 1
  34.                     if room.blok == 17 then
  35.                         room.blok = 1
  36.                     end
  37.                     room.startblok = 1
  38.                 end
  39.             end
  40.             if room.blok > 0 then
  41.                 sound_stopMusic()
  42.             end
  43.             if no_dialog() and isReady(small) and isReady(big) then
  44.                 if room.dohrat > 0 then
  45.                     room.dohrat = room.dohrat - 1
  46.                 end
  47.                 if room.uvod == 0 then
  48.                     room.uvod = 1
  49.                     switch(pokus){
  50.                         [1] = function()
  51.                             pom1 = 4
  52.                         end,
  53.                         [2] = function()
  54.                             pom1 = random(5)
  55.                         end,
  56.                         [3] = function()
  57.                             pom1 = random(5)
  58.                         end,
  59.                         default = function()
  60.                             if random(2) == 0 then
  61.                                 pom1 = 0
  62.                             else
  63.                                 pom1 = random(5)
  64.                             end
  65.                         end,
  66.                     }
  67.                     if pom1 > 0 then
  68.                         addm(20, "dr-m-tojesnad")
  69.                         if random(2) == 0 then
  70.                             addv(3, "dr-v-jiste")
  71.                         end
  72.                     end
  73.                     if pom1 >= 2 then
  74.                         addm(random(20) + 5, "dr-m-musela")
  75.                     end
  76.                     if pom1 >= 4 then
  77.                         addv(random(15) + 3, "dr-v-mozna")
  78.                     else
  79.                         adddel(random(20) + 25)
  80.                     end
  81.                     if pom1 >= 3 then
  82.                         addm(0, "dr-m-hruza")
  83.                     end
  84.                 elseif room.dohrat == 0 then
  85.                     room.dohrat = -1
  86.                     sound_stopMusic()
  87.                     adddel(10)
  88.                     planSet(melodak1, "afaze", 3)
  89.                     melodak1:planDialog(random(10) + 5, "d1-1-hudba"..random(3))
  90.                     adddel(5)
  91.                     planSet(basak, "hlasky", 2)
  92.                     planSet(piskac, "hlasky", 2)
  93.                     adddel(10)
  94.                     planSet(melodak1, "hlasky", 1)
  95.                     hlavni:planDialog(30 + random(10), "d1-5-nevadi"..random(3))
  96.                     adddel(10)
  97.                     planSet(room, "blok", 0)
  98.                 end
  99.             end
  100.         end
  101.     end
  102.  
  103.     -- -------------------------------------------------------------
  104.     local function prog_init_melodak1()
  105.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  106.  
  107.         melodak1.hrat = -1
  108.         melodak1.mrk = 0
  109.         melodak1.hlasky = 0
  110.         melodak1.posl = -1
  111.  
  112.         return function()
  113.             if melodak1.hlasky > 0 and not melodak1:isTalking() then
  114.                 repeat
  115.                     pom1 = random(3)
  116.                 until pom1 ~= melodak1.posl
  117.                 melodak1.posl = pom1
  118.                 melodak1:talk("d1-2-brb"..pom1)
  119.                 melodak1.hlasky = melodak1.hlasky - 1
  120.             end
  121.             if room.startblok == 1 then
  122.                 if isIn(room.blok, {7, 8, 11, 12, 15, 16}) then
  123.                     melodak1.hrat = 0
  124.                 else
  125.                     melodak1.hrat = -1
  126.                 end
  127.                 if melodak1.hrat > -1 then
  128.                     model_killSound(MELODAK_SONG)
  129.                     model_talk(MELODAK_SONG, "d1-z-v"..melodak1.hrat)
  130.                     setanim(melodak1, "a4a2a4a2a4a2a4a2a4a2d2a4a2d2a4a2d2a4a2d2a4a2d2a4a2d2" .. "a4a2a4a2a4a2a4a2a4a2d2a4a2d2a4a2d2a4a2d2a4a2d4a4")
  131.                 else
  132.                     setanim(melodak1, "d?5-10a0")
  133.                 end
  134.             end
  135.             if melodak1.mrk == 1 and melodak1.afaze ~= 0 then
  136.                 melodak1.afaze = melodak1.afaze + 1
  137.             end
  138.             goanim(melodak1)
  139.             if melodak1:isTalking() then
  140.                 melodak1.afaze = random(2) * 2 + 2
  141.             elseif room.blok < 0 and random(100) < 5 then
  142.                 melodak1.afaze = 0
  143.             end
  144.             if random(100) < 5 then
  145.                 melodak1.mrk = 1
  146.             else
  147.                 melodak1.mrk = 0
  148.             end
  149.             if melodak1.mrk == 1 and melodak1.afaze > 0 then
  150.                 melodak1.afaze = melodak1.afaze - 1
  151.             end
  152.             melodak1:updateAnim()
  153.         end
  154.     end
  155.  
  156.     -- -------------------------------------------------------------
  157.     local function prog_init_hlavni()
  158.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  159.  
  160.         return function()
  161.             if hlavni:isTalking() then
  162.                 hlavni.afaze = random(3)
  163.             else
  164.                 hlavni.afaze = 0
  165.             end
  166.             hlavni:updateAnim()
  167.         end
  168.     end
  169.  
  170.     -- -------------------------------------------------------------
  171.     local function prog_init_basak()
  172.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  173.  
  174.         basak.hrat = -1
  175.         basak.mrk = 0
  176.         basak.afaze = 2
  177.         basak.hlasky = 0
  178.         basak.posl = -1
  179.  
  180.         return function()
  181.             if basak.hlasky > 0 and not basak:isTalking() then
  182.                 repeat
  183.                     pom1 = random(3)
  184.                 until pom1 ~= basak.posl
  185.                 basak.posl = pom1
  186.                 basak:talk("d1-4-brb"..pom1)
  187.                 basak.hlasky = basak.hlasky - 1
  188.             end
  189.             if room.startblok == 1 then
  190.                 if isIn(room.blok, {1, 2, 3}) then
  191.                     basak.hrat = -1
  192.                 elseif room.blok == 4 then
  193.                     basak.hrat = 1
  194.                 elseif isIn(room.blok, {5, 6, 9, 10, 13, 14}) then
  195.                     basak.hrat = 2
  196.                 else
  197.                     basak.hrat = 3
  198.                 end
  199.                 if basak.hrat > -1 then
  200.                     model_killSound(BASAK_SONG)
  201.                     model_talk(BASAK_SONG, "d1-z-b"..basak.hrat)
  202.                     if basak.hrat == 1 then
  203.                         setanim(basak, "a0d3a2d3a0d19a2d3a0d3a2d3a0d19a2d3")
  204.                     else
  205.                         setanim(basak, "a0d3a2d3a0d19a2d3a0d3a2d3a0d6a2a0d3a2d3a0d6a2")
  206.                     end
  207.                 end
  208.             end
  209.             if basak.mrk == 1 then
  210.                 basak.afaze = basak.afaze - 1
  211.             end
  212.             if basak:isTalking() then
  213.                 basak.afaze = random(2) * 2
  214.             elseif room.blok < 0 then
  215.                 basak.afaze = 2
  216.             end
  217.             goanim(basak)
  218.             if random(100) < 5 then
  219.                 basak.mrk = 1
  220.             else
  221.                 basak.mrk = 0
  222.             end
  223.             if basak.mrk == 1 then
  224.                 basak.afaze = basak.afaze + 1
  225.             end
  226.             basak:updateAnim()
  227.         end
  228.     end
  229.  
  230.     -- -------------------------------------------------------------
  231.     local function prog_init_piskac()
  232.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  233.  
  234.         piskac.hrat = -1
  235.         piskac.xicht = 0
  236.         piskac.hlasky = 0
  237.         piskac.posl = -1
  238.  
  239.         return function()
  240.             if piskac.hlasky > 0 and not piskac:isTalking() then
  241.                 repeat
  242.                     pom1 = random(3)
  243.                 until pom1 ~= piskac.posl
  244.                 piskac.posl = pom1
  245.                 piskac:talk("d1-3-brb"..pom1)
  246.                 piskac.hlasky = piskac.hlasky - 1
  247.             end
  248.             if piskac:isTalking() then
  249.                 piskac.xicht = random(2) * 2
  250.             else
  251.                 piskac.xicht = 0
  252.             end
  253.             if room.blok > -1 then
  254.                 piskac.xicht = 6
  255.             end
  256.             if room.startblok == 1 then
  257.                 if isIn(room.blok, {1, 2, 5, 6, 9, 10, 13, 14}) then
  258.                     piskac.hrat = 1
  259.                 else
  260.                     piskac.hrat = 2
  261.                 end
  262.                 piskac.xicht = 4
  263.                 model_killSound(PISKAC_SONG)
  264.                 model_talk(PISKAC_SONG, "d1-z-p"..piskac.hrat)
  265.             end
  266.             if random(100) < 5 then
  267.                 piskac.afaze = piskac.xicht + 1
  268.             else
  269.                 piskac.afaze = piskac.xicht
  270.             end
  271.             piskac:updateAnim()
  272.         end
  273.     end
  274.  
  275.     -- -------------------------------------------------------------
  276.     local function prog_init_melodak2()
  277.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  278.  
  279.         melodak2.hrat = -1
  280.         melodak2.mrk = 0
  281.  
  282.         return function()
  283.             if room.startblok == 1 then
  284.                 if isIn(room.blok, {9, 13}) then
  285.                     melodak2.hrat = 1
  286.                 elseif isIn(room.blok, {10, 14}) then
  287.                     melodak2.hrat = 2
  288.                 else
  289.                     melodak2.hrat = -1
  290.                 end
  291.                 if melodak2.hrat > -1 then
  292.                     model_killSound(MELODAK_SONG)
  293.                     model_talk(MELODAK_SONG, "d1-z-v"..melodak2.hrat)
  294.                     if melodak2.hrat == 1 then
  295.                         setanim(melodak2, "a2d15a3d15a2d28a0")
  296.                     else
  297.                         setanim(melodak2, "a3d15a2d15a3d15a2d7")
  298.                     end
  299.                 else
  300.                     melodak2.afaze = 0
  301.                 end
  302.             end
  303.             if melodak2.mrk == 1 and melodak2.afaze == 1 then
  304.                 melodak2.afaze = melodak2.afaze - 1
  305.             end
  306.             goanim(melodak2)
  307.             if random(100) < 5 then
  308.                 melodak2.mrk = 1
  309.             else
  310.                 melodak2.mrk = 0
  311.             end
  312.             if melodak2.mrk == 1 and melodak2.afaze == 0 then
  313.                 melodak2.afaze = melodak2.afaze + 1
  314.             end
  315.             melodak2:updateAnim()
  316.         end
  317.     end
  318.  
  319.     -- -------------------------------------------------------------
  320.     local function prog_init_snecek()
  321.         return function()
  322.             if room.blok > 0 then
  323.                 if snecek.afaze < 2 then
  324.                     snecek.afaze = snecek.afaze + 1
  325.                 end
  326.             end
  327.             snecek:updateAnim()
  328.         end
  329.     end
  330.  
  331.     -- --------------------
  332.     local update_table = {}
  333.     local subinit
  334.     subinit = prog_init_room()
  335.     if subinit then
  336.         table.insert(update_table, subinit)
  337.     end
  338.     subinit = prog_init_melodak1()
  339.     if subinit then
  340.         table.insert(update_table, subinit)
  341.     end
  342.     subinit = prog_init_hlavni()
  343.     if subinit then
  344.         table.insert(update_table, subinit)
  345.     end
  346.     subinit = prog_init_basak()
  347.     if subinit then
  348.         table.insert(update_table, subinit)
  349.     end
  350.     subinit = prog_init_piskac()
  351.     if subinit then
  352.         table.insert(update_table, subinit)
  353.     end
  354.     subinit = prog_init_melodak2()
  355.     if subinit then
  356.         table.insert(update_table, subinit)
  357.     end
  358.     subinit = prog_init_snecek()
  359.     if subinit then
  360.         table.insert(update_table, subinit)
  361.     end
  362.     return update_table
  363. end
  364. local update_table = prog_init()
  365.  
  366.  
  367. -- -----------------------------------------------------------------
  368. -- Update
  369. -- -----------------------------------------------------------------
  370. function prog_update()
  371.     for key, subupdate in pairs(update_table) do
  372.         subupdate()
  373.     end
  374. end
  375.  
  376.